package com.wjw.java.others.annotation_;

/**
 *  -----------------------------------------------------------------------------------------------
 * 1.注解Annotation,也被称为元数据Metadata：
 *   用于修饰包、类、属性、方法、构造器、局部变量等数据的信息
 *
 * 2.和注释一样,注解不影响程序逻辑,但注解可以被编译或运行,相当于嵌入在代码中的补充信息
 *
 * 3.在javaSE中,注解的使用比较简单,如标记过时功能,忽略警告等...
 *   在javaEE中,注解比较重要,如配置应用程序的任何切面,替代冗余的代码和XML配置
 * -----------------------------------------------------------------------------------------------
 * 三个基本的Annotation：
 * 1.@Override:该注解只能用在方法上,用于重写父类的方法,源码如下：
 *
 *   @Target(ElementType.METHOD)
 *   @Retention(RetentionPolicy.SOURCE)
 *   public @interface Override {
 *   }
 *
 *   @Target(ElementType.METHOD),说明只能修饰方法
 *   @Target是修饰注解的注解：称为元注解
 *   @interface是用来标注该类是一个“注解类”,而不是接口interface
 *
 * 2.@Deprecated:用于标识某个元素已过时,该注解能用在包、类、属性(字段)、方法、构造器、局部变量、参数上,源码如下：
 *   @Documented
 *   @Retention(RetentionPolicy.RUNTIME)
 *   @Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE})
 *   public @interface Deprecated {
 *   }
 *
 * 3.@SuppressWarnings:用于抑制编译器警告,该注解能用类、属性(字段)、方法、参数、构造器、局部变量、上,源码如下：
 *   @Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
 *   @Retention(RetentionPolicy.SOURCE)
 *   public @interface SuppressWarnings {
 *     String[] value();
 *   }
 *
 *  该注解中有数组 String[] value(); 可以传参{"unchecked","unused","all"}
 * -----------------------------------------------------------------------------------------------
 */
//@SuppressWarnings({"all"})
public class Annotation extends Father{

    @Override
    public void show() {
        System.out.println("重写父类的show()...");
    }

    @Deprecated
    public static void outTimeMethod(){
        System.out.println("过时的方法");
    }

    public static void main(String[] args) {
        Annotation.outTimeMethod();
    }
}
class Father{
    public void show(){
        System.out.println("父类的show()...");
    }
}
